package cn.fan.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyPage {
    private static final int DEFAULTPAGE=5; // 默认前端显示5页

    public <T> MyPage(IPage<T> page){
        this.navigatepage=DEFAULTPAGE;
        init(page);
    }

    public <T> MyPage(IPage<T> page, int navigatepage){
        this.navigatepage= navigatepage<1 ? 1 : navigatepage;
        init(page);
    }

    private <T> void init(IPage<T> page) {
        this.size=page.getSize();
        this.pages=page.getPages()<1 ? 1 : page.getPages();
        this.current=page.getCurrent();
        this.records = page.getRecords();
        this.total = page.getTotal();

        if (this.current!=null && this.current==1)
            this.isfirst=true;

        if (this.current!=null && this.pages==this.current)
            this.islast=true;

        // 定义展示的页数
        if(this.pages<=navigatepage){
            this.navigatepages=new int[this.pages.intValue()];
            for (int i=0;i<this.navigatepages.length;i++){
                this.navigatepages[i]=i+1;
            }
        }else{
            this.navigatepages=new int[navigatepage];
            int startNum=this.current.intValue()-this.navigatepage/2;
            int endNum=startNum+this.navigatepage;

            if(startNum<1){
                startNum=1;
            }else if(endNum>this.pages){
                startNum=this.pages.intValue()-this.navigatepage+1;
            }
            for (int i=0;i<this.navigatepages.length;i++){
                this.navigatepages[i]=i+startNum;
            }

        }
    }

    private Long size; // 页面大小
    private Long pages; // 总页数
    private Long current; // 当前页
    private boolean isfirst; // 是否首页
    private boolean islast; // 是否末页
    private int navigatepage; // 前端显示的页数的数量
    private int[] navigatepages; // 前端显示的页数（当前页的相邻页集合）

    private List<?> records;
    private Long total;

}

